package com.xique.park.service.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.xique.park.bean.domain.ParkOn;
import com.xique.park.bean.domain.ParkOnV1;
import com.xique.park.bean.request.comm.ParkOnListRequest;
import com.xique.park.controller.client.web.bean.search.ParkOnSearch;
import com.xique.park.controller.client.web.bean.vo.ClientHandOutParkInInfoVo;

import java.util.List;

/**
 * 在场车辆Service接口
 *
 * @author xique
 * @date 2021-12-09
 */
public interface IParkOnService {

    /**
     * 查询在场车辆
     *
     * @param id 在场车辆ID
     * @return 在场车辆
     */
    ParkOn selectParkOnById(Long id);

    /**
     * 查询在场车辆列表
     *
     * @param parkOn 在场车辆
     * @return 在场车辆集合
     */
    List<ParkOn> selectParkOnList(ParkOn parkOn);

    /**
     * 根据查询条件查询在场车辆列表
     *
     * @param request 查询条件
     * @return 在场车辆列表
     */
    List<ParkOn> selectParkOnAllList(ParkOnListRequest request);

    /**
     * 查询在场车辆列表 --分页
     *
     * @param search 查询参数
     * @return 分页查询结果
     */
    IPage<ParkOn> selectParkOnPage(ParkOnListRequest search);

    /**
     * 新增在场车辆
     *
     * @param parkOn 在场车辆
     * @return 结果
     */
    int insertParkOn(ParkOn parkOn);

    /**
     * 修改在场车辆
     *
     * @param parkOn 在场车辆
     * @return 结果
     */
    int updateParkOn(ParkOn parkOn);

    /**
     * 批量删除在场车辆
     *
     * @param ids 需要删除的在场车辆ID
     * @return 结果
     */
    int deleteParkOnByIds(List<Long> ids);

    /**
     * 删除在场车辆信息
     *
     * @param id 在场车辆ID
     * @return 结果
     */
    int deleteParkOnById(Long id);

    /**
     * 批量查询
     *
     * @param ids ID列表
     * @return 在场记录列表
     */
    List<ParkOn> selectBatchIds(List<Long> ids);

    /**
     * 查询在场车辆数
     *
     * @param parkOn /
     * @return 在场车辆数
     */
    Long selectParkOnCount(ParkOn parkOn);

    /**
     * 根据车牌号查询在场车辆
     *
     * @param parkId parkId
     * @param plate  车牌号
     * @return 在场车辆列表
     */
    List<ParkOn> selectParkOnByPlate(Long parkId, String plate);

    /**
     * 手动出场-模糊查询在场车辆列表
     *
     * @param parkOn /
     * @return 在场车辆列表
     */
    List<ClientHandOutParkInInfoVo> getHandOutParkInInfoVoList(ParkOn parkOn);

    /**
     * 根据条件查询在场车辆
     *
     * @param search /
     * @return com.xique.client.bean.domain.ParkIn
     * @author shd
     * @date 2021/11/24 11:34
     */
    ParkOnV1 selectParkOn(ParkOnSearch search);

    /**
     * 根据在场ID查询在场信息和进场信息
     *
     * @param id 在场ID
     * @return 在场信息和进场信息
     */
    ParkOn selectParkOnAndParkInById(Long id);

    /**
     * 查找指定日期之前的记录
     *
     * @param parkId        车场ID
     * @param beforeDateStr 指定日期
     * @return 在场记录列表
     */
    List<ParkOn> selectParkOnListBeforeDay(Long parkId, String beforeDateStr);

    /**
     * 根据车场ID和车牌列表获取在场记录信息
     *
     * @param parkId    车场ID
     * @param plateList 车牌列表
     * @return 在场记录信息
     */
    List<ParkOn> selectParkOnByPlateList(Long parkId, List<String> plateList);
}
